﻿//#include <application.h>
//#include <spdlog/sinks/ansicolor_sink-inl.h>
//#include <utl/async.h>
//#include <GLFW/glfw3.h>
//#include <gfx/dx12/swapchain.h>
//#include <window/setting/SettingWindow.h>
//#include <gfx/dx12/frame_buffer.h>
//#include <qfiledialog.h>
//#include <gfx/dx12/texture.h>
//#include <res/icon_font_def.h>
//#include <gfx/dx12/render_target.h>
//#include <system/preview_system.h>
//
//namespace
//{
//	struct
//	{
//		int argc;
//		char** argv;
//		Application* app;
//	}global{};
//}
//
//void resize_callback(GLFWwindow* window, int width, int height)
//{
//	Application::Instance().swap->delayed_resize(static_cast<u32>(width), static_cast<u32>(height));
//}
//
//Application::Application() :
//	q_app{ global.argc,global.argv },
//	logger{ "SnackBox",std::make_shared<spdlog::sinks::ansicolor_stderr_sink_mt>() },
//	ws{},
//	async_pool{},
//	sync_queue{}
//{
//	global.app = this;
//	utl::async_initialize();
//	primal::gfx::initialize();
//	primal::preview_initialize();
//
//	cmd = utl::make_unique<primal::gfx::DirectCMD>();
//	this->main_window = ws.CreateWnd("Render Surface", 1280, 720);
//
//	glfwSetWindowSizeCallback(main_window.get(), resize_callback);
//	this->swap = utl::make_unique<primal::gfx::SwapChain>(main_window.get());
//	primal::gui::initialize(main_window.get());
//
//	primal::gui::set_theme_blender();
//}
//
//Application::~Application()
//{
//	primal::gfx::shutdown();
//	utl::async_shutdown();
//	global.app = nullptr;
//}
//
//Application& Application::Instance()
//{
//	return *global.app;
//}
//
////constexpr char asss[4] = "";
//
//class ui_test : public primal::GuiWindowBase
//{
//public:
//	ui_test() :GuiWindowBase{ "屏幕" }
//	{}
//private:
//	void content(const primal::FontList& icon_ft) override
//	{
//		ImGui::Text("%.3f", ImGui::GetIO().Framerate);
//		if (ImGui::Button("打开窗口"))
//		{
//			QFileDialog::getOpenFileName();
//		}
//
//		ImGui::PushFont(icon_ft[primal::FontType::FontType_Min]);
//		ImGui::Text(primal::iconft::e900); ImGui::SameLine();
//		ImGui::Text(primal::iconft::e901); ImGui::SameLine();
//		ImGui::Text(primal::iconft::e902); ImGui::SameLine();
//		ImGui::Text(primal::iconft::e903); ImGui::SameLine();
//		ImGui::Text(primal::iconft::e904); ImGui::SameLine();
//		ImGui::Text(primal::iconft::e905); ImGui::SameLine();
//		ImGui::Text(primal::iconft::f189); 
//		ImGui::PopFont();
//
//		ImGui::PushFont(icon_ft[primal::FontType::FontType_Max]);
//		ImGui::PushStyleColor(ImGuiCol_Button, {});
//		ImGui::Button(primal::iconft::eec3); ImGui::SameLine();
//		ImGui::Button(primal::iconft::f206); ImGui::SameLine();
//		ImGui::Button(primal::iconft::eeca); ImGui::SameLine();
//		ImGui::Button(primal::iconft::f05a); ImGui::SameLine();
//		ImGui::Button(primal::iconft::f06d); 
//		ImGui::PopStyleColor();
//		ImGui::PopFont();
//
//
//		
//		//ImGui::SameLine();
//		//ImGui::Text("七");
//	}
//};
//
//class swap_task : public utl::task_base
//{
//public:
//	swap_task(primal::Window& win) :cmds{}, swap{ win.get() }, life{ true }
//	{}
//	~swap_task()
//	{
//		this->life = false;
//	}
//	void action(bool* par_life) override
//	{
//		while (*par_life && life)
//		{
//			cmds.Begin();
//			auto list = cmds.AcquireNextList();
//			swap.begin(list);
//			swap.end(list);
//			cmds.End();
//		}
//	}
//private:
//	bool life;
//	primal::gfx::DirectCMD cmds;
//	primal::gfx::SwapChain swap;
//};
//
//class preview_window : primal::GuiWindowBase
//{
//public:
//	preview_window() :GuiWindowBase{ "预览" }//, rt{ 200u,200u }
//	{}
//
//	void content(const primal::FontList& icon_ft) override
//	{
//		ImGui::Text("开始");
//		ImGui::Image((ImTextureID)primal::current_preview().ptr, {200,200});
//		ImGui::Text("结束");
//	}
//	//primal::gfx::RenderTarget rt;
//private:
//};
//
//void Application::run()
//{
//	//primal::gfx::ConstantBuffer<int> test_buffer{ gfx.ptr() };
//
//	ui_test ut{ };
//	/*auto window = ws.CreateWnd();
//	auto window1 = ws.CreateWnd();
//	auto window2 = ws.CreateWnd();
//	swap_task st{ window };
//	swap_task st1{ window1 };
//	swap_task st2{ window2 };
//	st.run();
//	st1.run();
//	st2.run();*/
//	preview_window pw{ };
//
//	//primal::gfx::DirectCommand<primal::gfx::COMMAND_FRAME_COUNT> cmd{};
//
//	while (!glfwWindowShouldClose(main_window.get()))
//	{
//		glfwPollEvents();
//
//
//		swap->do_resize(cmd.get());
//		cmd->Begin();
//		auto list = cmd->AcquireNextList();
//
//		auto heap = primal::gfx::srv().Get();
//		list->SetDescriptorHeaps(1, &heap);
//
//		//list->SetGraphicsRootConstantBufferView(0u, test_buffer.get_address(fi));
//		primal::gui::set_render_list(list);
//
//		swap->begin(list);
//		primal::gui::render();
//		swap->end(list);
//
//		cmd->End();
//	}
//}
//
//int main(int argc, char** argv)
//{
//	global.argc = argc;
//	global.argv = argv;
//	Application{}.run();
//}
#include <WinSock2.h>

int main(int argc, char** argv)
{
	select
	return 0;
}